#include "bh1750.h"

//BH1750写一个字节
//返回值	成功：0		失败：非0 
uint8_t BH1750_Byte_Write(uint8_t data)
{
	bsp_iic_start();
	//发送写地址
	bsp_iic_send_byte(BH1750_Addr|0);
	if(bsp_iic_wait_ack()==IIC_NO_ACK)
		return 1;
	//发送控制命令
	bsp_iic_send_byte(data);
	if(bsp_iic_wait_ack()==IIC_NO_ACK)
		return 2;
	bsp_iic_stop();
	return 0;
}

//BH1750读取测量数据
//返回值 成功：返回光照强度 	失败：返回0
uint16_t BH1750_Read_Measure(void)
{
	uint16_t receive_data=0; 
	bsp_iic_start();
	//发送读地址
	bsp_iic_send_byte(BH1750_Addr|1);
	if(bsp_iic_wait_ack()==IIC_NO_ACK)
		return 0;
	//读取高八位
	receive_data=bsp_iic_read_byte();
	bsp_iic_send_ack();
	//读取低八位
	receive_data=(receive_data<<8)+bsp_iic_read_byte();
	bsp_iic_send_noack();
	bsp_iic_stop();
	return receive_data;	//返回读取到的数据
}


//BH1750s上电
void BH1750_Power_ON(void)
{
	BH1750_Byte_Write(POWER_ON);
}

//BH1750s断电
void BH1750_Power_OFF(void)
{
	BH1750_Byte_Write(POWER_OFF);
}

//BH1750复位	仅在上电时有效
void BH1750_RESET(void)
{
	BH1750_Byte_Write(MODULE_RESET);
}

//BH1750初始化
void BH1750_Init(void)
{
	BH1750_Power_ON();	//BH1750s上电
	BH1750_RESET();			//BH1750复位
	BH1750_Byte_Write(Measure_Mode);
	HAL_Delay(120);
}

//获取光照强度
float LIght_Intensity(void)
{
	return (float)(BH1750_Read_Measure()/1.1f*Resolurtion);
}

